# -*- coding: utf-8 -*-
from django.db import models
from django.contrib.auth.models import User, Group
from choices import UF, WORKFLOW
from bd42.utils import model_fields




### Requisitos ###
## ToDo ##
# adicionar link para exclusão de item no template_list de cada model
# esta faltando os help_text

## Done ##




class Titulacao(models.Model):
    descricao = models.CharField(max_length=50)

    class Admin:
        pass

    class Meta:
        verbose_name = 'titulação'
        verbose_name_plural = 'titulações'

    def __unicode__(self):
        return self.descricao




class Usuario(models.Model):
    user = models.ForeignKey(User, unique=True)#, max_num_in_admin=1, edit_inline=models.STACKED)
    dataNascimento = models.DateField()#core=True)
    endereco = models.CharField(max_length=150,)# core=True)
    cidade = models.ForeignKey('Cidade')
    titulacao = models.ForeignKey(Titulacao,)# core=True)
    lattes = models.CharField(max_length=150,)# core=True)

#    class Admin:
#        list_display = ('__unicode__', 'titulacao',)
#        list_filter = ('titulacao',)
#        search_fields = ['user__first_name', 'user__last_name',]

    class Meta:
        verbose_name='usuário'


    def __unicode__(self):
        return self.user.get_full_name()

    def is_orientador(self):
        return True

    def is_autor(self):
        return True

    def is_publicador(self):
        return True




class TipoDePrograma(models.Model):
    descricao = models.CharField(max_length=150)

#    class Admin:
#        pass

    class Meta:
        verbose_name = 'tipo de Programa'
        verbose_name_plural = 'tipos de Programa'

    def __unicode__(self):
        return self.descricao




class Instituicao(models.Model):
    nome = models.CharField(max_length=50)
    sigla = models.CharField(max_length=15)
    telefone = model_fields.PhoneModelField() #models.CharField(max_length=20)
    site = models.URLField()
    email = models.EmailField()

#    class Admin:
#        list_display = ('__unicode__', 'site', 'email', 'telefone',)

    class Meta:
        verbose_name = 'instituição'
        verbose_name_plural = 'instituições'

    def __unicode__ (self):
        return "%s - %s" % (self.sigla, self.nome)




class Cidade(models.Model):
    nome = models.CharField(max_length=50)
    uf = models.CharField(max_length=2, choices=UF)

#    class Admin:
#        list_display = ('nome', 'uf',)
#        list_filter = ('uf',)
#        search_fields = ['nome',]

    def __unicode__(self):
        return "%s - %s" % (self.nome, self.uf)




class Campus(models.Model):
    # fazer unicode com instituicao + nome, assim fica mais legivel na hora de cadastrar
    instituicao = models.ForeignKey(Instituicao)
    nome = models.CharField(max_length=50)
    endereco = models.CharField(max_length=150)
    cidade = models.ForeignKey(Cidade)
    site = models.URLField()
    email = models.EmailField()
    telefone = model_fields.PhoneModelField() #models.CharField(max_length=20)

#    class Admin:
#        list_display = ('nome', 'instituicao', 'cidade',)
#        list_filter = ('instituicao', 'cidade',)
#        search_fields = ['nome',]

    class Meta:
        verbose_name_plural = u'campi'

    def __unicode__ (self):
        return self.nome




class Programa(models.Model):
    # fazer unicode com TipoDePrograma + unicode de Campus ex (Instituição -> campus -> TipoDePrograma -> nomePrograma)
    nome = models.CharField(max_length=150)
    descricao = models.TextField()
    tipo_de_programa = models.ForeignKey(TipoDePrograma)
    campus = models.ForeignKey(Campus)

#    class Admin:
#        list_display = ('nome', 'tipo_de_programa', 'campus',)
#        list_filter =  ('tipo_de_programa', 'campus',)
#        search_fields = ['nome', 'descricao',]

    def __unicode__ (self):
        return self.nome




class Trabalho(models.Model):
    programa = models.ForeignKey(Programa)
    titulo = models.CharField(max_length=250)
    resumo = models.TextField(blank=True,)
    title = models.CharField(max_length=250, blank=True,)
    abstract =models.TextField(blank=True,)
    # mudar para snippet de Tagging
    palavrasChave = models.CharField(max_length=150, blank=True,)
    keywords = models.CharField(max_length=150, blank=True,)
    arquivo = models.FileField(upload_to='arquivos') # configurar path de destino dos arquivos
    dataSubmissao = models.DateField(blank=True, null=True)
    dataConteudo = models.DateField(blank=True, null=True)
    dataPublicacao = models.DateField(blank=True, null=True)
    anotacaoCorrecao = models.TextField('Anotação da Correção', blank=True,)
    autor = models.ForeignKey(User, related_name="autor")
    # fazer uma classe (model) para coAutor (porque pode existir um coAutor não esta cadastrado no sistema)
    #coAutor = models.ManyToManyField(User, related_name="coAutor", blank=True, null=True)
    colaborador = models.ForeignKey(User, related_name="colaborador")
    publicador = models.ForeignKey(User, related_name="publicador", blank=True, null=True,)
    # descrever isso no documento de requisitos
    # e representar as regras do wordflow em um diagrama (olhar UML -dia. atividade)
    workflow = models.CharField(
        max_length=50,
        default='cor_col_aut',
        choices=WORKFLOW,
    )

#    class Admin:
#        list_display = ('titulo', 'autor', 'programa',)
#        list_filter = ('programa', 'workflow')

    class Meta:
        permissions = (
            ("autor", "Autor"),
            ("colaborador", "Colaborador"),
            ("publicador", "Publicador"),
        )

    def __unicode__ (self):
        return self.titulo
    
    def status_workflow (self):
        if self.workflow == 'cor_col_aut' or self.workflow == 'cor_pub_aut':
            return 'autor'
        elif self.workflow == 'cor_aut_col' or self.workflow == 'cor_pub_col':
            return 'colaborador'
        elif self.workflow == 'cor_col_pub' or self.workflow == 'cor_aut_pub':
            return 'publicador'
        elif self.workflow == 'publicado':
            return 'publicado'
    
    def get_absolute_url(self):
        return "/trabalho/%d/" % self.id




class CoAutor(models.Model):
    trabalho = models.ForeignKey(Trabalho)
    nome = models.CharField(max_length=100)
    papel = models.CharField(max_length=100)
    
#    class Admin:
#        pass
    
    class Meta:
        verbose_name = "Co-Autor"
        verbose_name_plural = "Co-Autores"
    
    def __unicode__ (self):
        return "%s (%s)" % (self.nome, self.papel)




class Correcao(models.Model):
    # falta definir como vai funcionar a cadastro e alteração
    trabalho = models.ForeignKey(Trabalho)
    usuario = models.ForeignKey(User)
    workflow = models.CharField(max_length=50, choices=WORKFLOW,)
    anotacao = models.TextField(verbose_name='anotação',)
    data_hora_envio = models.DateTimeField()
    
    class Meta:
        verbose_name = 'correção'
        verbose_name_plural = 'correções'
    
    def __unicode__ (self):
        return self.anotacao[:30]

